﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class Elementos
    {
        private string strMotivo;
        
        public string Descripcion { get; set; }
        public string Motivo
        {
            get { return this.strMotivo; }
            set 
            { 
                this.strMotivo = value;
            }
        }

        public Elementos(string descripcion)
        {
            this.Descripcion = descripcion;
            this.Motivo = string.Empty;
        }
    }

    [Serializable]
    public class clsDictamen_CRN:clsEstado,IControlEstados
    {
        #region Resultados obtenidos del dictamen
        public clsInmueble_CRN  Inmueble { get; set; }
        public string ObservacionesGenerales { get; set; }
        public string Justificacion { get; set; }
        public bool ContieneElementosDescalificados
        {
            get
            {
                if (this.ElementosDescalificados.Count == 0)
                    return false;
                return true;
            }
        }
        public BindingList<Elementos> ElementosDescalificados { get; set; }
        public double DictamenCalificacion
        {
            get
            {
                return this.ZonasDeRiesgoCalificacion + this.VialidadesCalificacion + this.InfraestructuraCalificacion + this.ObraNegraCalificacion + this.InstalacionesCalificacion + this.CalidadCalificacion + this.EquipamentoCalificacion;
            }
        }
        public string ResultadoDeDictamen
        {
            get
            {
                if ((this.DictamenCalificacion < 70) || (this.ContieneElementosDescalificados))
                    return "No Aprobado";
                else
                    return "Aprobado";
            }
        }
        
        #endregion

        #region Propiedades de Zonas de Riesgo
        public string ZonasDeRiesgoObservaciones { get; set; }
        public int ZonasDeRiesgoSubtotalCalificacion
        {
            get
            {
                return this.ZonasInundablesCalificacion + this.ZonasDeAfectacionCalificacion + this.RestriccionesCalificacion;
            }
        }
        public double ZonasDeRiesgoCalificacion
        {
            get
            {
                return Convert.ToDouble(this.ZonasDeRiesgoSubtotalCalificacion) * 0.2;
            }
        }
        //--Zonas de Afectación
        public string ZonasDeAfectacionEvaluacion { get; set; }
        public Elementos ZonasDeAfectacionMotivo;
        public int ZonasDeAfectacionCalificacion
        {
            get
            {
                if (this.ZonasDeAfectacionEvaluacion.Length > 0)
                {
                    switch (ZonasDeAfectacionEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.ZonasDeAfectacionMotivo );
                            return 35;
                        case "B":
                            this.EliminaElemento(this.ZonasDeAfectacionMotivo);
                            return 24;
                        case "C":
                            this.CreaElmento(this.ZonasDeAfectacionMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Zonas de Inundacion
        public string ZonasInundablesEvaluacion { get; set; }
        public Elementos ZonasInundablesMotivo;
        public int ZonasInundablesCalificacion
        {
            get
            {
                if (this.ZonasInundablesEvaluacion.Length > 0)
                {
                    switch (ZonasInundablesEvaluacion)
                    {
                        case "A":
                            {
                                this.EliminaElemento(this.ZonasInundablesMotivo);
                                return 30;
                            }
                        case "B":
                            {
                                this.EliminaElemento(this.ZonasInundablesMotivo);
                                return 21;
                            }
                        case "C":
                            {
                                this.CreaElmento(this.ZonasInundablesMotivo);
                                return 0;
                            }
                        default:
                            return 0;
                    }
                }
                else return 0;
            }
        }
        //--Restrcciones
        public string RestriccionesEvaluacion { get; set; }
        public Elementos RestriccionesMotivo;
        public int RestriccionesCalificacion
        {
            get
            {
                if (RestriccionesEvaluacion.Length > 0)
                {
                    switch (RestriccionesEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.RestriccionesMotivo);
                            return 35;
                        case "C":
                            this.CreaElmento(this.RestriccionesMotivo);
                            return 0;
                        default:
                            
                            return 0;
                    }
                }
                else
                    return 0;
            }
        }
        #endregion

        #region Propiedades de Vialiadades
        public string VialiadadesObservaciones { get; set; }
        public int VialidadesSumaCalificacion
        {
            get
            {
                return this.PavimentosCalificacion + this.GuarnicionesCalificacion + this.AccesosCalificacion;
            }
        }
        public double VialidadesCalificacion
        {
            get
            {
                return Convert.ToDouble(this.VialidadesSumaCalificacion) * 0.10;
            }
        }

        //--Pavimento
        public string PavimentosMotivo { get; set; }
        public string PavimentosEvaluacion { get; set; }
        public int PavimentosCalificacion
        {
            get
            {
                if (this.PavimentosEvaluacion.Length > 0)
                {
                    switch (PavimentosEvaluacion)
                    {
                        case "A":
                            return 35;
                        case "B":
                            return 24;
                        case "C":
                            return 19;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Guarniciones
        public string GuarnicionesEvaluacion { get; set; }
        public string GuarnicionesMotivo { get; set; }
        public int GuarnicionesCalificacion
        {
            get
            {
                if (this.GuarnicionesEvaluacion.Length > 0)
                {
                    switch (GuarnicionesEvaluacion)
                    {
                        case "A":
                            return 30;
                        case "B":
                            return 21;
                        case "C":
                            return 17;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Accesos
        public string AccesosEvaluacion { get; set; }
        public string AccesosMotivo { get; set; }
        public int AccesosCalificacion
        {
            get
            {
                if (this.AccesosEvaluacion.Length > 0)
                {
                    switch (AccesosEvaluacion)
                    {
                        case "A":
                            return 35;
                        case "B":
                            return 24;
                        case "C":
                            return 19;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        #endregion

        #region Propiedades de Infraestructura
        public string InfraestructuraObservaciones { get; set; }
        public int InfraestructuraSumaCalificacion
        {
            get
            {
                return this.AguaPotableCalificacion + this.DrenajeCalificacion + this.EnergiaElecCalificacion + this.AlumbradoCalificacion;
            }
        }
        public double InfraestructuraCalificacion
        {
            get
            {
                return Convert.ToDouble(this.InfraestructuraSumaCalificacion) * 0.15;
            }
        }
        //--Agua potable
        public string AguaPotableEvaluacion { get; set; }
        public Elementos AguaPotableMotivo { get; set; }
        public int AguaPotableCalificacion
        {
            get
            {
                if (this.AguaPotableEvaluacion.Length > 0)
                {
                    switch (AguaPotableEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.AguaPotableMotivo);
                            return 25;
                        case "C":
                            this.CreaElmento(this.AguaPotableMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Drenaje
        public string DrenajeEvaluacion { get; set; }
        public Elementos DrenajeMotivo { get; set; }
        public int DrenajeCalificacion
        {
            get
            {
                if (this.DrenajeEvaluacion.Length > 0)
                {
                    switch (DrenajeEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.DrenajeMotivo);
                            return 25;
                        case "B":
                            this.EliminaElemento(this.DrenajeMotivo);
                            return 17;
                        case "C":
                            this.CreaElmento(this.DrenajeMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Energía Eléctrica
        public string EnergiaElecEvaluacion { get; set; }
        public Elementos EnergiaElecMotivo { get; set; }
        public int EnergiaElecCalificacion
        {
            get
            {
                if (this.EnergiaElecEvaluacion.Length > 0)
                {
                    switch (EnergiaElecEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.EnergiaElecMotivo);
                            return 25;
                        case "C":
                            this.CreaElmento(this.EnergiaElecMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Alumbrado Público
        public string AlumbradoEvaluacion { get; set; }
        public string AlumbradoMotivo { get; set; }
        public int AlumbradoCalificacion
        {
            get
            {
                if (this.AlumbradoEvaluacion.Length > 0)
                {
                    switch (AlumbradoEvaluacion)
                    {
                        case "A":
                            return 25;
                        case "B":
                            return 17;
                        case "C":
                            return 14;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        #endregion

        #region Propiedades de Obra Negra
        public string ObraNegraObservaciones { get; set; }
        public int ObraNegraSumaCalificaciones
        {
            get
            {
                return this.CimentacionCalificacion + this.EstructuraCalificacion + this.MurosCalificacion + this.LosasCalificacion + this.BardasCalificacion + this.ImpermeabilizacionCalificacion;
            }
        }
        public double ObraNegraCalificacion
        {
            get
            {
                return Convert.ToDouble(this.ObraNegraSumaCalificaciones) * 0.20;
            }
        }
        //--Cimentacion
        public string CimentacionEvaluacion { get; set; }
        public Elementos CimentacionMotivo { get; set; }
        public int CimentacionCalificacion
        {
            get
            {
                if (this.CimentacionEvaluacion.Length > 0)
                {
                    switch (CimentacionEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.CimentacionMotivo);
                            return 20;
                        case "B":
                            this.EliminaElemento(this.CimentacionMotivo);
                            return 14;
                        case "C":
                            this.CreaElmento(this.CimentacionMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Estructura
        public string EstructuraEvaluacion { get; set; }
        public Elementos EstructuraMotivo { get; set; }
        public int EstructuraCalificacion
        {
            get
            {
                if (this.EstructuraEvaluacion.Length > 0)
                {
                    switch (EstructuraEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.CimentacionMotivo);
                            return 20;
                        case "B":
                            this.EliminaElemento(this.CimentacionMotivo);
                            return 14;
                        case "C":
                            this.CreaElmento(this.CimentacionMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Muros
        public string MurosEvaluacion { get; set; }
        public Elementos MurosMotivo { get; set; }
        public int MurosCalificacion
        {
            get
            {
                if (this.MurosEvaluacion.Length > 0)
                {
                    switch (MurosEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.MurosMotivo);
                            return 20;
                        case "B":
                            this.EliminaElemento(this.MurosMotivo);
                            return 14;
                        case "C":
                            this.CreaElmento(this.MurosMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Losas
        public string LosasEvaluacion { get; set; }
        public Elementos LosasMotivo { get; set; }
        public int LosasCalificacion
        {
            get
            {
                if (this.LosasEvaluacion.Length > 0)
                {
                    switch (LosasEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.LosasMotivo);
                            return 20;
                        case "B":
                            this.EliminaElemento(this.LosasMotivo);
                            return 14;
                        case "C":
                            this.CreaElmento(this.LosasMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Bardas
        public string BardasEvaluacion { get; set; }
        public Elementos BardasMotivo { get; set; }
        public int BardasCalificacion
        {
            get
            {
                if (this.BardasEvaluacion.Length > 0)
                {
                    switch (BardasEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.BardasMotivo);
                            return 10;
                        case "B":
                            this.EliminaElemento(this.BardasMotivo);
                            return 7;
                        case "C":
                            this.CreaElmento(this.BardasMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Impermeabilización
        public string ImpermeabilizacionEvaluacion { get; set; }
        public Elementos ImpermeabilizacionMotivo { get; set; }
        public int ImpermeabilizacionCalificacion
        {
            get
            {
                if (this.ImpermeabilizacionEvaluacion.Length > 0)
                {
                    switch (ImpermeabilizacionEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.ImpermeabilizacionMotivo);
                            return 10;
                        case "B":
                            this.EliminaElemento(this.ImpermeabilizacionMotivo);
                            return 7;
                        case "C":
                            this.CreaElmento(this.ImpermeabilizacionMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        #endregion

        #region Propiedades de Instalaciones
        public string InstalacionesObservaciones { get; set; }
        public int InstalacionesSumaCalificaciones
        {
            get
            {
                return this.HidraulicaCalificacion + this.SanitariaCalificacion + this.ElectricaCalificacion + this.GasCalificacion;
            }
        }
        public double InstalacionesCalificacion
        {
            get
            {
                return Convert.ToDouble(this.InstalacionesSumaCalificaciones) * 0.15;
            }
        }
        //--Hidraúlica
        public string HidraulicaEvaluacion { get; set; }
        public string HidraulicaMotivo { get; set; }
        public int HidraulicaCalificacion
        {
            get
            {
                if (this.HidraulicaEvaluacion.Length > 0)
                {
                    switch (HidraulicaEvaluacion)
                    {
                        case "A":
                            return 25;
                        case "B":
                            return 17;
                        case "C":
                            return 15;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Sanitaria
        public string SanitariaEvaluacion { get; set; }
        public string SanitariaMotivo { get; set; }
        public int SanitariaCalificacion
        {
            get
            {
                if (this.SanitariaEvaluacion.Length > 0)
                {
                    switch (SanitariaEvaluacion)
                    {
                        case "A":
                            return 25;
                        case "B":
                            return 17;
                        case "C":
                            return 15;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Eléctrica
        public string ElectricaEvaluacion { get; set; }
        public string ElectricaMotivo { get; set; }
        public int ElectricaCalificacion
        {
            get
            {
                if (this.ElectricaEvaluacion.Length > 0)
                {
                    switch (ElectricaEvaluacion)
                    {
                        case "A":
                            return 25;
                        case "B":
                            return 17;
                        case "C":
                            return 15;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Gas
        public string GasEvaluacion { get; set; }
        public string GasMotivo { get; set; }
        public int GasCalificacion
        {
            get
            {
                if (this.GasEvaluacion.Length > 0)
                {
                    switch (GasEvaluacion)
                    {
                        case "A":
                            return 20;
                        case "B":
                            return 14;
                        case "C":
                            return 12;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        #endregion

        #region Propiedades de Calidad
        public string CalidadObservaciones { get; set; }
        public int CalidadSumaCalificaciones
        {
            get
            {
                return this.FuncionalidadCalificacion + this.EdoConservacionCalificacion + this.VidaUtilCalificacion;
            }
        }
        public double CalidadCalificacion
        {
            get
            {
                return Convert.ToDouble(this.CalidadSumaCalificaciones) * 0.15;
            }
        }
        //--Funcionalidad
        public string FuncionaliadadEvaluacion { get; set; }
        public string FuncionaliadadMotivo { get; set; }
        public int FuncionalidadCalificacion
        {
            get
            {
                if (this.FuncionaliadadEvaluacion.Length > 0)
                {
                    switch (FuncionaliadadEvaluacion)
                    {
                        case "A":
                            return 25;
                        case "B":
                            return 17;
                        case "C":
                            return 15;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Estado de conservación
        public string EdoConservacionEvaluacion { get; set; }
        public Elementos EdoConservacionMotivo { get; set; }
        public int EdoConservacionCalificacion
        {
            get
            {
                if (this.EdoConservacionEvaluacion.Length > 0)
                {
                    if (this.EdoConservacionEvaluacion.Contains("A"))
                    {
                        this.EliminaElemento(this.EdoConservacionMotivo);
                        return 35;
                    }
                    else
                    {
                        if (this.EdoConservacionEvaluacion.Contains("B"))
                        {
                            this.EliminaElemento(this.EdoConservacionMotivo);
                            return 24;
                        }
                        else
                        {
                            if (this.EdoConservacionEvaluacion.Contains("C"))
                            {
                                this.CreaElmento(this.EdoConservacionMotivo);
                                return 0;
                            }
                        }
                    }
                    //switch (EdoConservacionEvaluacion)
                    //{
                    //    case "A":
                    //        this.EliminaElemento(this.EdoConservacionMotivo);
                    //        return 35;
                    //    case "B":
                    //        this.EliminaElemento(this.EdoConservacionMotivo);
                    //        return 24;
                    //    case "C":
                    //        this.CreaElmento(this.EdoConservacionMotivo);
                    //        return 0;
                    //    default:
                    //        return 0;
                    //}
                }
                return 0;
            }
        }
        //--Vida útil
        public string VidaUtilEvaluacion { get; set; }
        public Elementos VidaUtilMotivo { get; set; }
        public int VidaUtilCalificacion
        {
            get
            {
                if (this.VidaUtilEvaluacion.Length > 0)
                {
                    switch (VidaUtilEvaluacion)
                    {
                        case "A":
                            this.EliminaElemento(this.VidaUtilMotivo);
                            return 35;
                        case "B":
                            this.EliminaElemento(this.VidaUtilMotivo);
                            return 24;
                        case "C":
                            this.CreaElmento(this.VidaUtilMotivo);
                            return 0;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        #endregion

        #region Propiedades de Equipamento
        public string EquipamentoObservaciones { get; set; }
        public int EquipamentoSumaCalificaciones
        {
            get
            {
                return this.EducacionCalificacion + this.SaludCalificacion + this.AvastoCalificacion + this.RecreacionCalificacion + this.TransporteCalificacion + this.VigilanciaCalificacion + this.RecoleccionBasuraCalificacion;
            }
        }
        public double EquipamentoCalificacion
        {
            get
            {
                return Convert.ToDouble(this.EquipamentoSumaCalificaciones) * 0.05;
            }
        }
        //--Educacion
        public string EducacionEvaluacion { get; set; }
        public string EducacionMotivo { get; set; }
        public int EducacionCalificacion
        {
            get
            {
                if (this.EducacionEvaluacion.Length > 0)
                {
                    switch (EducacionEvaluacion)
                    {
                        case "A":
                            return 30;
                        case "B":
                            return 21;
                        case "C":
                            return 19;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Salud
        public string SaludEvaluacion { get; set; }
        public string SaludMotivo { get; set; }
        public int SaludCalificacion
        {
            get
            {
                if (this.SaludEvaluacion.Length > 0)
                {
                    switch (SaludEvaluacion)
                    {
                        case "A":
                            return 20;
                        case "B":
                            return 14;
                        case "C":
                            return 13;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Avasto
        public string AvastoMotivo { get; set; }
        public string AvastoEvaluacion { get; set; }
        public int AvastoCalificacion
        {
            get
            {
                if (this.AvastoEvaluacion.Length > 0)
                {
                    switch (AvastoEvaluacion)
                    {
                        case "A":
                            return 30;
                        case "B":
                            return 21;
                        case "C":
                            return 19;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Recreacion
        public string RecreacionEvaluacion { get; set; }
        public string RecreacionMotivo { get; set; }
        public int RecreacionCalificacion
        {
            get
            {
                if (this.RecreacionEvaluacion.Length > 0)
                {
                    switch (RecreacionEvaluacion)
                    {
                        case "A":
                            return 15;
                        case "B":
                            return 10;
                        case "C":
                            return 9;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Transporte
        public string TransporteEvaluacion { get; set; }
        public string TransporteMotivo { get; set; }
        public int TransporteCalificacion
        {
            get
            {
                if (this.TransporteEvaluacion.Length > 0)
                {
                    switch (TransporteEvaluacion)
                    {
                        case "A":
                            return 15;
                        case "B":
                            return 10;
                        case "C":
                            return 9;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //--Vigilancia
        public string VigilanciaEvaluacion { get; set; }
        public string VigilanciaMotivo { get; set; }
        public int VigilanciaCalificacion
        {
            get
            {
                if (this.VigilanciaEvaluacion.Length > 0)
                {
                    switch (VigilanciaEvaluacion)
                    {
                        case "A":
                            return 10;
                        case "C":
                            return 9;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        //Recoleccion de basura
        public string RecoleccionBasuraEvaluacion { get; set; }
        public string RecoleccionBasuraMotivo { get; set; }
        public int RecoleccionBasuraCalificacion
        {
            get
            {
                if (this.RecoleccionBasuraEvaluacion.Length > 0)
                {
                    switch (RecoleccionBasuraEvaluacion)
                    {
                        case "A":
                            return 10;
                        case "C":
                            return 9;
                        default:
                            return 0;
                    }
                }
                return 0;
            }
        }
        #endregion

        #region Constructor
        public clsDictamen_CRN(clsInmueble_CRN objInmueble)
            : base()
        {
            this.ElementosDescalificados = new BindingList<Elementos>();
            this.AccesosEvaluacion = string.Empty;
            this.AccesosMotivo = string.Empty;
            this.AguaPotableEvaluacion = string.Empty;
            this.AguaPotableMotivo = new Elementos("Infraestructura - Agua Potable");
            this.AvastoEvaluacion = string.Empty;
            this.AvastoMotivo = string.Empty;
            this.BardasEvaluacion = string.Empty;
            this.BardasMotivo = new Elementos("Obra Negra - Bardas");
            this.CalidadObservaciones = string.Empty;
            this.CimentacionEvaluacion = string.Empty;
            this.CimentacionMotivo = new Elementos("Obra Negra - Cimentación");
            this.DrenajeEvaluacion = string.Empty;
            this.DrenajeMotivo = new Elementos("Infraestructura - Drenaje");
            this.EdoConservacionEvaluacion = string.Empty;
            this.EdoConservacionMotivo = new Elementos("Calidad - Estado de Conservación");
            this.EducacionEvaluacion = string.Empty;
            this.EducacionMotivo = string.Empty;
            this.ElectricaEvaluacion = string.Empty;
            this.ElectricaMotivo = string.Empty;
            this.EnergiaElecEvaluacion = string.Empty;
            this.EnergiaElecMotivo = new Elementos("Infraestructura - Energía Eléctrica");
            this.EquipamentoObservaciones = string.Empty;
            this.EstructuraEvaluacion = string.Empty;
            this.EstructuraMotivo = new Elementos("Obra Negra - Estructura");
            this.FuncionaliadadEvaluacion = string.Empty;
            this.FuncionaliadadMotivo = string.Empty;
            this.GasEvaluacion = string.Empty;
            this.GasMotivo = string.Empty;
            this.GuarnicionesEvaluacion = string.Empty;
            this.GuarnicionesMotivo = string.Empty;
            this.HidraulicaEvaluacion = string.Empty;
            this.HidraulicaMotivo = string.Empty;
            this.ImpermeabilizacionEvaluacion = string.Empty;
            this.ImpermeabilizacionMotivo = new Elementos("Obra Negra - Impermeabilización");
            this.InfraestructuraObservaciones = string.Empty;
            this.Inmueble = objInmueble;
            this.InstalacionesObservaciones = string.Empty;
            this.LosasEvaluacion = string.Empty;
            this.LosasMotivo = new Elementos("Obra Negra - Losas");
            this.MurosEvaluacion = string.Empty;
            this.MurosMotivo = new Elementos("Obra Negra - Muros");
            this.ObraNegraObservaciones = string.Empty;
            this.PavimentosEvaluacion = string.Empty;
            this.PavimentosMotivo = string.Empty;
            this.RecoleccionBasuraEvaluacion = string.Empty;
            this.RecoleccionBasuraMotivo = string.Empty;
            this.RecreacionEvaluacion = string.Empty;
            this.RecreacionMotivo = string.Empty;
            this.RestriccionesEvaluacion = string.Empty;
            this.RestriccionesMotivo = new Elementos("Zona de Riesgo - Restricciones");
            this.SaludMotivo = string.Empty;
            this.SaludEvaluacion = string.Empty;
            this.SanitariaEvaluacion = string.Empty;
            this.SanitariaMotivo = string.Empty;
            this.TransporteEvaluacion = string.Empty;
            this.TransporteMotivo = string.Empty;
            this.VialiadadesObservaciones = string.Empty;
            this.VidaUtilEvaluacion = string.Empty;
            this.VidaUtilMotivo = new Elementos("Calidad - Vida Útil");
            this.VigilanciaEvaluacion = string.Empty;
            this.VigilanciaMotivo = string.Empty;
            this.ZonasDeAfectacionEvaluacion = string.Empty;
            this.ZonasDeAfectacionMotivo = new Elementos("Zona de Riesgo - Zona de Afectación");
            this.ZonasDeRiesgoObservaciones = string.Empty;
            this.ZonasInundablesEvaluacion = string.Empty;
            this.ZonasInundablesMotivo = new Elementos("Zona de Riesgo - Áreas Inundables");
            this.ObservacionesGenerales = string.Empty;
            this.Justificacion = string.Empty;
            this.AlumbradoEvaluacion = string.Empty;
            this.AlumbradoMotivo = string.Empty;

        }
        #endregion

        #region Métodos de clase

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaDictamen();
                else
                {
                    if (this.EsModificado)
                        return ModificaDictamen();
                    else
                        return EliminaDictamen();
                }
            }
            return false;
        }

        private bool EliminaDictamen()
        {
            clsDictamen_CD objDictamen_CD = new clsDictamen_CD();
            return objDictamen_CD.EliminaDictamen(this);
        }

        private bool ModificaDictamen()
        {
            clsDictamen_CD objDictamen_CD = new clsDictamen_CD();
            return objDictamen_CD.ActualizaDictamen(this);
        }

        private bool CreaDictamen()
        {
            clsDictamen_CD objDictamen_CD = new clsDictamen_CD();
            if (objDictamen_CD.CreaNuevoDictamen(this))
            {
                this.EsModificado = true;
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsDictamen_CRN RecuperaDictamenDeInmueble(clsInmueble_CRN objInmueble)
        {
            clsDictamen_CRN objDictamen = new clsDictamen_CRN(objInmueble);
            clsDictamen_CD objDictamen_CD = new clsDictamen_CD();
            dsInmoviliario.DictamenRow DictamenRecuperado = objDictamen_CD.RecuperaDictamenDeAvaluo(objInmueble.Avaluo.IdAvaluo);
            if (DictamenRecuperado != null)
            {
                objDictamen.AccesosEvaluacion = DictamenRecuperado.AccesoEvaluacion;
                objDictamen.AccesosMotivo = DictamenRecuperado.AccesoMotivo;
                objDictamen.AguaPotableEvaluacion = DictamenRecuperado.AguaPotableEvaluacion;
                objDictamen.AguaPotableMotivo = new Elementos("Infraestructura - Agua Potable");
                objDictamen.AguaPotableMotivo.Motivo = DictamenRecuperado.AguaPotableMotivos;
                objDictamen.AlumbradoEvaluacion = DictamenRecuperado.AlumbradoEvaluacion;
                objDictamen.AlumbradoMotivo = DictamenRecuperado.AlumbradoMotivos;
                objDictamen.AvastoEvaluacion = DictamenRecuperado.AvastoEvaluacion;
                objDictamen.AvastoMotivo = DictamenRecuperado.AvastoMotivos;
                objDictamen.BardasEvaluacion = DictamenRecuperado.BardasEvaluacion;
                objDictamen.BardasMotivo = new Elementos("Obra Negra - Bardas");
                objDictamen.BardasMotivo.Motivo = DictamenRecuperado.BardasMotivos;
                objDictamen.CalidadObservaciones = DictamenRecuperado.CalidadObservaciones;
                objDictamen.CimentacionEvaluacion = DictamenRecuperado.CimentacionEvaluacion;
                objDictamen.CimentacionMotivo = new Elementos("Obra Negra - Cimentación");
                objDictamen.CimentacionMotivo.Motivo = DictamenRecuperado.CimentacionMotivos;
                objDictamen.DrenajeEvaluacion = DictamenRecuperado.DrenajeEvaluacion;
                objDictamen.DrenajeMotivo = new Elementos("Infraestructura - Drenaje");
                objDictamen.DrenajeMotivo.Motivo = DictamenRecuperado.DrenajeMotivos;
                objDictamen.EdoConservacionEvaluacion = DictamenRecuperado.EdoConservacionEvaluacion;
                objDictamen.EdoConservacionMotivo = new Elementos("Calidad - Estado de Conservación");
                objDictamen.EdoConservacionMotivo.Motivo = DictamenRecuperado.EdoConservacionMotivos;
                objDictamen.EducacionEvaluacion = DictamenRecuperado.EducacionEvaluacion;
                objDictamen.EducacionMotivo = DictamenRecuperado.EduacacionMotivos;
                objDictamen.ElectricaEvaluacion = DictamenRecuperado.ElectricaEvaluacion;
                objDictamen.ElectricaMotivo = DictamenRecuperado.ElectricaMotivos;
                objDictamen.EnergiaElecEvaluacion = DictamenRecuperado.EnergiaElecEvaluacion;
                objDictamen.EnergiaElecMotivo = new Elementos("Infraestructura - Energía Eléctrica");
                objDictamen.EnergiaElecMotivo.Motivo = DictamenRecuperado.EnergiaElecMotivos;
                objDictamen.EquipamentoObservaciones = DictamenRecuperado.EquipamentoObservacion;
                objDictamen.EsModificado = true;
                objDictamen.EstructuraEvaluacion = DictamenRecuperado.EstructuraEvaluacion;
                objDictamen.EstructuraMotivo = new Elementos("Obra Negra - Estructura");
                objDictamen.EstructuraMotivo.Motivo = DictamenRecuperado.EstructuraMotivos;
                objDictamen.FuncionaliadadEvaluacion = DictamenRecuperado.FuncionalidadEvaluacion;
                objDictamen.FuncionaliadadMotivo = DictamenRecuperado.FuncionalidadMotivos;
                objDictamen.GasEvaluacion = DictamenRecuperado.GasEvaluacion;
                objDictamen.GasMotivo = DictamenRecuperado.GasMotivos;
                objDictamen.GuarnicionesEvaluacion = DictamenRecuperado.GuarnicionesEvaluacion;
                objDictamen.GuarnicionesMotivo = DictamenRecuperado.GuarnicionesMotivo;
                objDictamen.HidraulicaEvaluacion = DictamenRecuperado.HidraulicaEvaluacion;
                objDictamen.HidraulicaMotivo = DictamenRecuperado.HidraulicaMotivos;
                objDictamen.ImpermeabilizacionEvaluacion = DictamenRecuperado.ImpermeabilizacionEvaluacion;
                objDictamen.ImpermeabilizacionMotivo = new Elementos("Obra Negra - Impermeabilización");
                objDictamen.ImpermeabilizacionMotivo.Motivo = DictamenRecuperado.ImpermeabilizacionMotivos;
                objDictamen.InfraestructuraObservaciones = DictamenRecuperado.InfraestructuraObservacion;
                objDictamen.InstalacionesObservaciones = DictamenRecuperado.InstalacionesObservaciones;
                objDictamen.Justificacion = DictamenRecuperado.Justificacion;
                objDictamen.LosasEvaluacion = DictamenRecuperado.LosasEvaluacion;
                objDictamen.LosasMotivo = new Elementos("Obra Negra - Losas");
                objDictamen.LosasMotivo.Motivo = DictamenRecuperado.LosasMotivos;
                objDictamen.MurosEvaluacion = DictamenRecuperado.MurosEvaluacion;
                objDictamen.MurosMotivo = new Elementos("Obra Negra - Muros");
                objDictamen.MurosMotivo.Motivo = DictamenRecuperado.MurosMotivos;
                objDictamen.ObraNegraObservaciones = DictamenRecuperado.ObraNegraObservaciones;
                objDictamen.ObservacionesGenerales = DictamenRecuperado.ObservacionesGenerales;
                objDictamen.PavimentosEvaluacion = DictamenRecuperado.PavimentoEvaluacion;
                objDictamen.PavimentosMotivo = DictamenRecuperado.PavimentoMotivo;
                objDictamen.RecoleccionBasuraEvaluacion = DictamenRecuperado.RecoleccionBasuraEvaluacion;
                objDictamen.RecoleccionBasuraMotivo = DictamenRecuperado.RecoleccionBasuraMotivos;
                objDictamen.RecreacionEvaluacion = DictamenRecuperado.RecreacionEvaluacion;
                objDictamen.RecreacionMotivo = DictamenRecuperado.RecreacionMotivos;
                objDictamen.RestriccionesEvaluacion = DictamenRecuperado.RestriccionesEvaluacion;
                objDictamen.RestriccionesMotivo = new Elementos("Zona de Riesgo - Restricciones");
                objDictamen.RestriccionesMotivo.Motivo = DictamenRecuperado.RestriccionesMotivo;
                objDictamen.SaludEvaluacion = DictamenRecuperado.SaludEvaluacion;
                objDictamen.SaludMotivo = DictamenRecuperado.SaludMotivos;
                objDictamen.SanitariaEvaluacion = DictamenRecuperado.SanitariaEvaluacion;
                objDictamen.SanitariaMotivo = DictamenRecuperado.SanitariaMotivos;
                objDictamen.TransporteEvaluacion = DictamenRecuperado.TransporteEvaluacion;
                objDictamen.TransporteMotivo = DictamenRecuperado.TransporteMotivos;
                objDictamen.VialiadadesObservaciones = DictamenRecuperado.VialidadesObservaciones;
                objDictamen.VidaUtilEvaluacion = DictamenRecuperado.VidaUtilEvaluacion;
                objDictamen.VidaUtilMotivo = new Elementos("Calidad - Vída Útil");
                objDictamen.VidaUtilMotivo.Motivo = DictamenRecuperado.VidaUtilMotivos;
                objDictamen.VigilanciaEvaluacion = DictamenRecuperado.VigilanciaEvaluacion;
                objDictamen.VigilanciaMotivo = DictamenRecuperado.VigilanciaMotivos;
                objDictamen.ZonasDeAfectacionEvaluacion = DictamenRecuperado.ZonasAfectacionEvaluacion;
                objDictamen.ZonasDeAfectacionMotivo = new Elementos("Zona de Riesgo - Zona de Afectación");
                objDictamen.ZonasDeAfectacionMotivo.Motivo = DictamenRecuperado.ZonasAfectacionMotivos;
                objDictamen.ZonasDeRiesgoObservaciones = DictamenRecuperado.ZonaRiesgoObservaciones;
                objDictamen.ZonasInundablesEvaluacion = DictamenRecuperado.AreasInundablesEvaluacion;
                objDictamen.ZonasInundablesMotivo = new Elementos("Zona de Riesgo - Áreas Inundables");
                objDictamen.ZonasInundablesMotivo.Motivo = DictamenRecuperado.AreasInundablesMotivos;
            }
            return objDictamen;
        }

        private void CreaElmento(Elementos objNuevoElemento)
        {
            if (!this.ElementosDescalificados.Contains(objNuevoElemento))
                this.ElementosDescalificados.Add(objNuevoElemento);
        }

        private void EliminaElemento(Elementos ElementoAEliminar)
        {
            while (this.ElementosDescalificados.Contains(ElementoAEliminar))
            {
                this.ElementosDescalificados.Remove(ElementoAEliminar);
            }
        }

        #endregion
    }
}
